﻿using Data.Contexto;
using Domain.Entidades;
using Domain.Interfaces.Repositorios;
using Services;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.SqlTypes;
using System.Linq;
using System.Net.Mail;
using System.Runtime.Remoting;
using System.Web;

namespace Data.Repositorios
{
    public class UsuarioRepository : RepositoryBase<VW_usuarios>, IUsuarioRepository
    {
        protected credisiteContext Db = new credisiteContext();
        protected credigeralContext Dbseg = new credigeralContext();

        public VW_usuarios autentica_usuario(usuario_logado user)
        {
            Generica gen = new Generica();
            byte[] senha = gen.getMD5Hash(user.senha);
            return (from u in Dbseg.VW_usuarios where u.usu_login == user.Login && u.usu_senha == senha select u).FirstOrDefault();
        }

        public VW_usuarios GetUsuarioLogado(int cod)
        {
            return Dbseg.VW_usuarios.FirstOrDefault(x => x.usu_codigo == cod);
        }

        public void troca_senha(string senha, int codigo)
        {
            try
            {
                Generica gen = new Generica();
                byte[] senha_byte = gen.getMD5Hash(senha);

                usuario _usu = (from u in Dbseg.usuario where u.usu_codigo == codigo select u).FirstOrDefault(); ;

                _usu.usu_senha = senha_byte;
                Dbseg.Entry(_usu).State = EntityState.Modified;
                Dbseg.SaveChanges();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public bool Verifica_senha_antiga(string senha, int codigo)
        {
            Generica gen = new Generica();
            byte[] senha_byte = gen.getMD5Hash(senha);

            VW_usuarios _usuario = (from u in Dbseg.VW_usuarios where u.usu_codigo == codigo && u.usu_senha == senha_byte select u).FirstOrDefault();

            if (_usuario == null)
                return false;
            else
            {
                return true;
            }
        }

        public IEnumerable<VW_usuarios> busca_usuarios_setor_unidade(int tipo, int codigo)
        {
            try
            {
                if (tipo == 1)
                {
                    return Dbseg.VW_usuarios.Where(x => x.uni_codigo == codigo).ToList();
                }
                else
                {
                    return Dbseg.VW_usuarios.Where(x => x.set_codigo == codigo).ToList();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public string busca_setor_unidade(string tipo, int uni)
        {
            try
            {
                //List<object> listatipos = new List<object>();




                if (tipo == "uni")
                {
                    var listatipos = from t in Dbseg.VW_unidade orderby t.uni_codigo select new { id = t.uni_codigo, desc = t.uni_descricao };
                    var oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); ;
                    string sJSON = oSerializer.Serialize(listatipos.ToList());
                    return sJSON;
                }
                else
                {
                    if (uni == -1)
                    {
                        var listatipos = from t in Dbseg.VW_setor orderby t.set_descricao select new { id = t.set_codigo, desc = t.set_descricao };
                        var oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
                        string sJSON = oSerializer.Serialize(listatipos.ToList());
                        return sJSON;
                    }
                    else
                    {
                        if (uni == 5000)
                        {
                            var listatipos = from t in Dbseg.VW_setor orderby t.set_descricao where t.set_codigo != 11 select new { id = t.set_codigo, desc = t.set_descricao };
                            var oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
                            string sJSON = oSerializer.Serialize(listatipos.ToList());
                            return sJSON;
                        }
                        else
                        {
                            var listatipos = from t in Dbseg.VW_setor orderby t.set_descricao where t.set_codigo == 11 select new { id = t.set_codigo, desc = t.set_descricao };
                            var oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
                            string sJSON = oSerializer.Serialize(listatipos.ToList());
                            return sJSON;

                        }

                    }

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public bool verifica_permissao(int permissao, int codigo)
        {
            if (Dbseg.VW_permissoes.Where(x => x.perm_codigo == permissao).Where(x => x.usu_codigo == codigo).ToList().Count > 0)
                return true;
            else
                return false;
        }

        public List<VW_usuarios> Listar(string tipo, int set_uni, string nome)
        {
            try
            {
                var users = Dbseg.VW_usuarios.Where(x => x.sta_codigo == 1 || x.sta_codigo == 3).ToList();
                if (tipo == "uni")

                    users = users.Where(x => x.uni_codigo == set_uni).ToList();
                else if (tipo == "set")
                    users = users.Where(x => x.set_codigo == set_uni).ToList();

                if (nome.Trim().Length > 0)
                {
                    nome = nome.ToUpper();
                    users = users.Where(x => x.usu_nome.Contains(nome)).ToList();
                }

                users = users.OrderBy(x => x.usu_nome).ToList();
                return users;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public IEnumerable<VW_unidade> busca_unidades(int tipo)
        {

            List<VW_unidade> uni = Dbseg.VW_unidade.OrderBy(x => x.uni_codigo).ToList();
            if (tipo == 1)
            {
                VW_unidade matriz = new VW_unidade();
                matriz.uni_codigo = -1;
                matriz.uni_descricao = "Todos";

                uni = Dbseg.VW_unidade.ToList();
                uni.Add(matriz);
            }



            return uni;
        }

        public IEnumerable<VW_tipo_email_envio_usuario> busca_email(int tip, int unidade, int setor)
        {

            if (unidade != -1 && setor != -1)
            {
                return Dbseg.VW_tipo_email_envio_usuario.Where(x => x.tip_codigo == tip && x.uni_codigo == unidade && x.set_codigo == setor && (x.sta_codigo == 1 || x.sta_codigo == 3)).ToList();

            }

            else
            {
                return Dbseg.VW_tipo_email_envio_usuario.Where(x => x.tip_codigo == tip && (x.sta_codigo == 1 || x.sta_codigo == 3)).ToList();

            }


           

        }

        public IEnumerable<VW_setor> busca_setores()
        {
            try
            {
                IEnumerable<VW_setor> setores = Dbseg.VW_setor.OrderBy(x => x.set_descricao).ToList();
                return setores;
            }

            catch (Exception ex)
            {
                throw ex;
            }

        }


      


    }
}